#include "facethread.h"
#include <QDebug>
#include <QMessageBox>
#include <vector>//向量
#include <unistd.h>
faceThread::faceThread(QObject *parent) : QObject(parent)
{

}

faceThread::~faceThread()
{

}

void faceThread::onFace(QImage img)
{
    //将图像转换为24bit 8-8-8,方便opecv调用
    QImage image = img.convertToFormat(QImage::Format_RGB888);
    //构造Mat对象
    Mat MatImg= Mat(image.height(),image.width(),CV_8UC3,\
                    image.bits(),image.bytesPerLine());
    //加载分类器(人脸正面检测)
    CascadeClassifier face_detector;//检测人正脸
    string fDetectotPath = "/home/bin/haarcascade_frontalface_alt.xml";
    face_detector.load(fDetectotPath);
    //创建向量:保存脸部数据检测结果,每个Rect都是一个人脸数据
    vector<Rect> faces;//x,y,h,w
    Mat imgGray;//保存灰度图像
    //将要处理的图片进行灰度处理,便于进一步识别
    cvtColor(MatImg,imgGray,CV_RGB2GRAY);
    //直方图形均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种算法
    equalizeHist(imgGray,imgGray);
    //多尺寸检测人脸
    face_detector.detectMultiScale(\
                imgGray,//要检测的图片
                faces,//表示检测到的人脸目标序列
                1.1,//表示每次图像尺寸减小的比例
                3,//目标图像至少检测三次才能算是的正的目标
                CV_HAAR_SCALE_IMAGE,//缩放图像来检测
                Size(30,30));
    if(!faces.empty()){

        emit someone();
        //播放警告声音  //QMediaPlayer play()
        qDebug()<<"检测到"<<faces.size()<<"个人入侵"<<endl;
        printf("someone in\n");
    }else{


    }
}
